package live_schedule

import (
	"vrcm/src/vrcm/common/models"
)

type ChannelBasic struct {
	models.Model

	TenantId      string `json:"tenant_id" gorm:"type:varchar(50);comment:租户id"`
	ChannelName   string `json:"channel_name" gorm:"type:varchar(50);comment:通道名称"`
	ChannelDesc   string `json:"channel_desc" gorm:"type:varchar(300);comment:通道描述"`
	ChannelState  int    `json:"channel_state" gorm:"type:tinyint;comment:通道状态 1 启用 2停用 3 异常 4 任务处理中"`
	RunState      int64  `json:"run_state" gorm:"type:tinyint;comment:是否开启定时 1是 2否"`
	StartTime     int64  `json:"start_time" gorm:"type:int;comment:启用时间"`
	EndTime       int64  `json:"end_time" gorm:"type:int;comment:停用时间"`
	TimeType      int64  `json:"time_type" gorm:"type:tinyint;comment:启停类型1不重复 2每天 3 每周 4 每个工作日"`
	CycleEndTime  int64  `json:"cycle_end_time" gorm:"type:int;comment:重复结束日期"`
	Weekly        string `json:"weekly" gorm:"type:varchar(50);comment:每周选择的执行日期"`
	EnableTime    int64  `json:"enable_time" gorm:"type:int;comment:启用时间"`
	IsSchedule    int    `json:"is_schedule" gorm:"type:int;comment:是否开启调度权限 1 是 2 否"`
	IsDelete      int    `json:"is_delete" gorm:"type:tinyint;comment:是否删除 1删除 2未删除"`
	LastStopTime  int64  `json:"last_stop_time" gorm:"type:int;comment:上一次停用时间"`
	TerminalTime  int64  `json:"terminal_time" gorm:"type:int;comment:立即开始时间"`
	IsTime        int    `json:"is_time" gorm:"type:int;comment:定时任务 1是 2否"`
	Progress      string `json:"progress" gorm:"type:varchar(10);comment:任务进度"`
	BasicInfo     string `json:"basic_info" gorm:"type:varchar(200);comment:基本信息"`
	ChartData     string `json:"chart_data" gorm:"type:text;comment:图形信息"`
	NewChartData  string `json:"new_chart_data" gorm:"type:text;comment:前端下发图形信息"`
	OutputUrls    string `json:"output_urls" gorm:"type:varchar(2000);comment:输出地址"`
	NextStartTime int64  `json:"next_start_time" gorm:"-"`
	models.ModelTime
	models.ControlBy
}

func (ChannelBasic) TableName() string {
	return "channel_basic"
}

func (e *ChannelBasic) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *ChannelBasic) GetId() interface{} {
	return e.Id
}

type CycleTime struct {
	models.Model

	TenantId  string `json:"tenant_id" gorm:"type:varchar(50);comment:租户id"`
	ChannelId int    `json:"channel_id" gorm:"type:bigint;comment:通道id"`
	StartTime int64  `json:"start_time" gorm:"type:int;comment:启用时间"`
	EndTime   int64  `json:"end_time" gorm:"type:int;comment:停用时间"`
	TimeType  int64  `json:"time_type" gorm:"type:tinyint;comment:启停类型1不重复 2每天 3 每周"`
	IsCancel  int    `json:"is_cancel" gorm:"type:tinyint;comment:是否取消 1是 2否"`
	IsRunning int    `json:"is_running" gorm:"type:tinyint;comment:是否正在运行 1是 2否"`
	models.ModelTime
	models.ControlBy
}

type CycleTime1 struct {
	TenantId string `json:"tenant_id" gorm:"type:varchar(50);comment:租户id"`
}

func (CycleTime) TableName() string {
	return "cycle_time"
}

type TreeNode struct {
	ParaNode NodeData
	Children []NodeData
}

type ChartData struct {
	Id       string     `json:"id"`
	NodeData []NodeData `json:"nodeData"`
	EdgeData []EdgeData `json:"edgeData"`
}

type EdgeData struct {
	Source Source `json:"source"`
	Target Target `json:"target"`
}
type Source struct {
	Id   string `json:"id"`
	Port string `json:"port"`
}

type Target struct {
	Id   string `json:"id"`
	Port string `json:"port"`
}

type NodeData struct {
	Node Node `json:"node"`
}

type Node struct {
	Position Position `json:"position"`
	Size     Size     `json:"size"`
	View     string   `json:"view"`
	Shape    string   `json:"shape"`
	Id       string   `json:"id"`
	Label    string   `json:"label"`
	Data     Data     `json:"data"`
	Type     string   `json:"type"`
	Image    string   `json:"image"`
	Ports    Ports    `json:"ports"`
	ZIndex   int      `json:"zIndex"`
}

type Position struct {
	X int `json:"x"`
	Y int `json:"y"`
}

type Size struct {
	Width  int `json:"width"`
	Height int `json:"height"`
}

type Data struct {
	SourceName        string   `json:"source_name,omitempty"`
	SourceUrl         string   `json:"source_url,omitempty"`
	FileType          string   `json:"fileType,omitempty"`
	Area              int      `json:"area,omitempty"`
	IsAnn             string   `json:"is_ann,omitempty"`
	Type              string   `json:"type,omitempty"`
	FormData          FormData `json:"formData,omitempty"`
	InputNum          int      `json:"input_num,omitempty"`
	SwitchCondition   []string `json:"switch_condition,omitempty"`
	SwitchDelay       int      `json:"switch_delay,omitempty"`
	SwitchMode        int      `json:"switch_mode,omitempty"`
	SwitchSystem      int      `json:"switch_system,omitempty"`
	BackupSwitchDelay int      `json:"backup_switch_delay,omitempty"`
	OutputType        int      `json:"output_type,omitempty"`
	StreamType        int      `json:"stream_type,omitempty"`
	Protocol          string   `json:"protocol,omitempty"`
	MainUrl           string   `json:"mainUrl,omitempty"`
	AccelerateId      []string `json:"accelerate_id,omitempty"`
	RecordType        []string `json:"record_type,omitempty"`
	Mp4Duration       int      `json:"mp4_duration,omitempty"`
	OutUrls           []OutUrl `json:"outUrls,omitempty"`
	Template          Template `json:"template,omitempty"`
	SourceFrom        string   `json:"source_from,omitempty"` //1信源池 2自定义 3传输设备 6素材文件
	SourceId          int      `json:"source_id,omitempty"`
	IsCustom          int      `json:"is_custom" comment:"是否自定义切换 1是 2否"`
	CustomUrl         string   `json:"custom_url" comment:"自定义切换地址"`
	EnableBlackWhite  int      `json:"enable_black_white" comment:"1启用 2不启用"`
	ListType          int      `json:"list_type" comment:"1黑名单 2白名单"`
	IPAddresses       []string `json:"ip_addresses" comment:"ip地址"`
	NodeState         int      `json:"node_state" comment:"ip地址"`
	TaskId            string   `json:"task_id,omitempty"`
	ActiveIndex       int      `json:"active_index,omitempty"`
}

type FormData struct {
	SourceFrom     string `json:"source_from"`
	PoolSourceFrom int    `json:"pool_source_from"`
	SourceId       int    `json:"sourceId"`
	SourceType     string `json:"source_type"`
}

type Template struct {
	TemplateId    string `json:"template_id"`
	Bitrate       int    `json:"bitrate"`
	VideoCodec    string `json:"video_codec"`
	VideoWidth    int    `json:"video_width"`
	VideoHeight   int    `json:"video_height"`
	AacBitrate    string `json:"aac_bitrate"`
	AacSamplerate string `json:"aac_samplerate"`
	Fps           int    `json:"fps"`
	Ratio         string `json:"ratio"`
	EncodingType  string `json:"encodingType"`
	Rc            string `json:"rc"`
	Qualitylevel  string `json:"qualitylevel"`
	Profile       string `json:"profile"`
}

type OutUrl struct {
	PortId    string `json:"portId"`
	OutputUrl string `json:"outputUrl"`
	NodeId    string `json:"node_id"`
}

type Ports struct {
	Groups Groups  `json:"groups"`
	Items  []Items `json:"items"`
}

type Groups struct {
	Right Right `json:"right,omitempty"`
	Left  Left  `json:"left,omitempty"`
}

type Right struct {
	Position RightPosition `json:"position"`
	Attrs    PositionAttrs `json:"attrs"`
}

type RightPosition struct {
	Name string `json:"name"`
	Args Args   `json:"args"`
}

type Args struct {
	Dx int `json:"dx"`
	Dy int `json:"dy"`
	X  int `json:"x"`
	Y  int `json:"y"`
}

type PositionAttrs struct {
	Circle Circle `json:"circle"`
}

type Circle struct {
	R           int    `json:"r"`
	Magnet      bool   `json:"magnet"`
	Stroke      string `json:"stroke"`
	StrokeWidth int    `json:"strokeWidth"`
	Fill        string `json:"fill"`
	Style       struct {
	} `json:"style"`
}

type Left struct {
	Position LeftPosition  `json:"position"`
	Attrs    PositionAttrs `json:"attrs"`
}

type LeftPosition struct {
	Name string `json:"name"`
	Args Args   `json:"args"`
}

type Items struct {
	Group string `json:"group"`
	Id    string `json:"id"`
	Attrs Attrs  `json:"attrs,omitempty"`
	//Args  Args   `json:"args"`
}

type Attrs struct {
	Text Text `json:"text"`
}

type Text struct {
	Text string `json:"text"`
}

type InputModel struct {
	InputId   string `json:"input_id"`
	InputPort string `json:"input_port"`
	InputUrl  string `json:"input_url"`
	SelfPort  string `json:"self_port"`
	SelfId    string `json:"self_id"`
}
